Grundkurs SQL

5.2  Unterabfragen in SQL – Am Beispiel

Wieder wollen wir uns einige einfache Beispiele ansehen. Wir beginnen mit der Anzeige von Nachname und Bruttogehalt des höchstbezahlten Mitarbeiters.

[1]SELECT name, bruttolohn
FROM   tbl_mitarbeiter
WHERE  bruttolohn = (SELECT MAX(bruttolohn)
                     FROM   tbl_mitarbeiter)

Die Unterabfrage hat keine direkte Beziehung zur äußeren Abfrage. Die resultierenden Ergebnisse der Unterabfrage dienen in Form einer Zwischentabelle nur als Eingabe der äußeren Abfrage. In MySQL (< Version 4.1, welche noch keine Unterabfragen hat) führen Sie diese Abfrage in zwei Schritten durch:
  1. Mit einem SELECT-Statement ermitteln Sie den höchsten Lohn in der Tabelle.
  2. Mit diesem Wert stellen Sie die aktuelle Anfrage zusammen.

Eine andere Lösung besteht darin, alle Zeilen absteigend zu sortieren und nur die erste Zeile zu nehmen, indem Sie die MySQL-spezifische LIMIT-Klausel benutzen:

[1]SELECT   name, bruttolohn
FROM     tbl_mitarbeiter
ORDER BY bruttolohn DESC
LIMIT 1

ACHTUNG:
Wenn es mehrere MAX-Werte gibt zeigt die LIMIT-Lösung nur einen davon!

Im folgenden Beispiel sollen alle Mitarbeiter angezeigt werden, die weniger Lohn erhalten als den Durchschnittslohn:

[13]SELECT name, bruttolohn
FROM   tbl_mitarbeiter
WHERE  bruttolohn < (SELECT AVG(bruttolohn)
                     FROM   tbl_mitarbeiter)